package com.zhuifeng.product.mapper;

import com.zhuifeng.orders.domain.OrdersDetails;
import com.zhuifeng.product.domain.Product;
import com.zhuifeng.product.response.ProductResponse;
import com.zhuifeng.product.domain.ProductSku;

import java.util.List;

/**
 * 商品Mapper接口
 *
 * @author zhuifeng
 * @date 2022-08-18
 */
public interface ProductMapper
{
    /**
     * 查询商品
     *
     * @param productId 商品主键
     * @return 商品
     */
    public ProductResponse selectProductByProductId(String productId);

    /**
     * 查询商品列表
     *
     * @param product 商品
     * @return 商品集合
     */
    public List<Product> selectProductList(Product product);

    /**
     * 新增商品
     *
     * @param product 商品
     * @return 结果
     */
    public int insertProduct(Product product);

    /**
     * 修改商品
     *
     * @param product 商品
     * @return 结果
     */
    public int updateProduct(Product product);

    /**
     * 删除商品
     *
     * @param productId 商品主键
     * @return 结果
     */
    public int deleteProductByProductId(String productId);

    /**
     * 批量删除商品
     *
     * @param productIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteProductByProductIds(String[] productIds);

    /**
     * 修改商品Sku库存数据
     * @param productSku
     */
    void updateProductSkuStock(ProductSku productSku);

    /**
     * 修改订单库存
     * @param ordersDetails
     */
    void updateProductSkuInventory(OrdersDetails ordersDetails);

    /**
     * 生成订单减库存
     * @param ordersDetails
     */
    void updateProductSkuSubtractInventory(OrdersDetails ordersDetails);

    /**
     * 确认收货
     * @param ordersDetails
     */
    void updateProductSkuAffirmReceivingInventory(OrdersDetails ordersDetails);

    void updateProductStatus(String productId);

    void updateProductStatusSold(String productId);
}
